package leetcode.string;

/**
 * 给你一个整数 x ，如果 x 是一个回文整数，返回 true ；否则，返回 false 。
 * <p>
 * 回文数是指正序（从左向右）和倒序（从右向左）读都是一样的整数。
 * <p>
 * 例如，121 是回文，而 123 不是。
 * <p>
 * <p>
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/palindrome-number
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 * 时间复杂度 0(logN)
 * 空间复杂度 O(1)
 */
public class Solution9 {
    public boolean isPalindrome(int x) {
        if (x < 0) {
            return false;
        }
        if (x < 10) {
            return true;
        }
        int q = x;
        int res = 0;
        while (q != 0) {
            int c = q % 10;
            res = res * 10 + c;
            q = q / 10;
        }
        return res == x;
    }

    /**
     * 第二种解法,只反转一半的数字
     *
     * @param x
     * @return
     */
    public boolean isPalindrome2(int x) {
        if (x < 0 || (x % 10 == 0 & x != 0)) {
            return false;
        }
        if (x < 10) {
            return true;
        }
        // 被反转得数字还剩下多长  x
        // 反转的数字值
        int res = 0;
        while (x > res) {
            int c = x % 10;
            res = res * 10 + c;
            x = x / 10;
        }
        return x == res || x == res / 10;
    }

    public static void main(String[] args) {
        Solution9 solution9 = new Solution9();
        System.out.println(solution9.isPalindrome2(10));
    }
}
